home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / program / gfxupd.lha / CybSrc.s next >
Text File  |  1995-12-19  |  19KB  |  810 lines

  1. _LVOOpenLibrary EQU -552
  2. _LVOCloseLibrary EQU -414
  3. _LVOAllocMem EQU -198
  4. _LVOFreeMem EQU -210
  5. grd_Buffers EQU $80000001
  6. grd_Width   EQU $80000002
  7. grd_Height  EQU $80000003
  8. grd_Depth   EQU $80000004
  9. grd_PixelLayout EQU $80000005
  10. grd_ColorSpace EQU $80000006
  11.  
  12. grd_PLANAR     EQU 0
  13. grd_PLANARI    EQU 1
  14. grd_CHUNKY     EQU 2
  15. grd_HICOL15    EQU 3
  16. grd_HICOL16    EQU 4
  17. grd_TRUECOL24  EQU 5
  18. grd_TRUECOL24P EQU 6
  19. grd_TRUECOL32  EQU 7
  20. grd_GRAFFITI   EQU 8
  21. grd_TRUECOL32B EQU 9
  22.  
  23. grd_Palette    EQU 0
  24. grd_RGB        EQU 1
  25. grd_BGR        EQU 2
  26. grd_RGBPC      EQU 3
  27. grd_BGRPC      EQU 4
  28.  
  29. ;    ;  0  TrueColor  LONG   RGB   %00000000 rrrrrrrr gggggggg bbbbbbbb   grd_TRUECOL32B + grd_RGB
  30. ;    ;  1  TrueColor 3 BYTE  RGB   %rrrrrrrr gggggggg bbbbbbbb            grd_TRUECOL24 + grd_RGB
  31. ;    ;  2  TrueColor  WORD   RGB   %rrrrrggg gggbbbbb                     grd_HICOL16 + grd_RGB
  32. ;    ;  3  TrueColor  WORD   RGB   %0rrrrrgg gggbbbbb                     grd_HICOL15 + grd_RGB
  33. ;    ;  4  TrueColor  LONG   BGR   %00000000 bbbbbbbb gggggggg rrrrrrrr   grd_TRUECOL32B + grd_BGR
  34. ;    ;  5  TrueColor 3 BYTE  BGR   %bbbbbbbb gggggggg rrrrrrrr            grd_TRUECOL24 + grd_BGR
  35. ;    ;  6  TrueColor  WORD   BGR   %bbbbbggg gggrrrrr                     grd_HICOL16 + grd_BGR
  36. ;    ;  7  TrueColor  WORD   BGR   %0bbbbbgg gggrrrrr                     grd_HICOL15 + grd_BGR
  37. ;    ;  8  TrueColor  LONG   RGB   %rrrrrrrr gggggggg bbbbbbbb 00000000   grd_TRUECOL32 + grd_RGB
  38. ;    ;  9  ColorMap   BYTE   -     -                                      grd_CHUNKY + grd_Palette
  39. ;    ; 10  Graffiti   BYTE   -     - (Graffiti style chunky, very special)grd_GRAFFITI + grd_Palette
  40. ;    ; 11  TrueColor  WORD   RGB   %gggbbbbb 0rrrrrgg                     grd_HICOL15 + grd_RGBPC
  41. ;    ; 12  TrueColor  WORD   BGR   %gggrrrrr 0bbbbbgg                     grd_HICOL15 + grd_BGRPC
  42. ;    ; 13  TrueColor  WORD   RGB   %gggbbbbb rrrrrggg                     grd_HICOL16 + grd_BGR
  43. ;    ; 14  TrueColor 3 BYTE  BGR   %bbbbbbbb gggggggg rrrrrrrr            grd_TRUECOL24 + grd_BGR
  44. ;    ; 15  TrueColor  LONG   BGR   %bbbbbbbb gggggggg rrrrrrrr 00000000   grd_TRUECOL32 + grd_BGR
  45. ;    ; 16  TrueColor  LONG   RGB   %rrrrrrrr gggggggg bbbbbbbb 00000000   grd_TRUECOL32 + grd_RGB
  46. ;    ; 17  TrueColor  WORD   BGR   %gggrrrrr bbbbbggg                     grd_HICOL16 + grd_BGRPC
  47.  
  48.  
  49. CALLSYS MACRO
  50.       jsr _LVO\1(a6)
  51.      ENDM
  52.  
  53. XLIB MACRO
  54.         XREF _LVO\1
  55.         ENDM
  56.  
  57. OpenLibs:
  58.         movem.l a0-a6/d0-d7,-(sp)
  59.         move.l $4,a6
  60.         move.l #0,CGXBase
  61.         lea     CyberName,a1
  62.         moveq   #40,d0
  63.         jsr     -552(a6)
  64.         move.l  d0,CGXBase(a5)
  65.         beq.s   .Error
  66.         move.l #-1,d6
  67. .Next   Move.l  d6,d0
  68.         move.l a6,-(sp)
  69.         move.l GfxBase(a5),a6
  70.         Jsr     -732(a6)
  71.         move.l (sp)+,a6
  72.         Move.l  d0,d6
  73.         move.l a6,-(sp)
  74.         move.l CGXBase(a5),a6
  75.         move.l d6,d0
  76.         jsr -54(a6)
  77.         move.l (sp)+,a6
  78.         cmp.l #0,d0
  79.         bne .CyberFound
  80.         Cmp.l   #-1,d6
  81.         Beq     .Error
  82.         bra .Next
  83. .CyberFound
  84.         Move.l  a5,d0
  85.         Bra.s   .Ok
  86. .Error  movem.l (sp)+,a0-a6/d0-d7
  87.         Moveq   #0,d0
  88.         rts
  89. .Ok     Movem.l (sp)+,a0-a6/d0-d7
  90.         moveq #1,d0
  91.         Rts
  92. CyberName: dc.b 'cybergraphics.library',0
  93.         even
  94. CGXBase: dc.l 0
  95.  
  96. SwitchScreens:
  97.         movem.l d2-d7/a4-a6,-(sp)
  98.         move.l IntBase,a6
  99.         move.l rsCGX_ActiveMap(a0),d1
  100.         move.l d0,rsCGX_ActiveMap(a0)
  101.         sub.l d7,d7
  102.         move.w rsCGX_Height(a0),d7
  103.         move.l rsCGX_MyScreen(a0),a0
  104.         cmp.l #0,d1
  105.         beq .BufOne
  106.         cmp.l #1,d1
  107.         beq .BufTwo
  108.         cmp.l #2,d1
  109.         beq .BufThree
  110.         bra .Exit
  111. .BufOne:
  112.         sub.l d1,d1
  113.         cmp.l #0,d0
  114.         beq .Exit
  115.         cmp.l #1,d0
  116.         beq .ZO
  117.         cmp.l #2,d0
  118.         beq .ZT
  119.         bra .Exit
  120. .BufTwo:
  121.         sub.l d1,d1
  122.         cmp.l #0,d0
  123.         beq .OZ
  124.         cmp.l #1,d0
  125.         beq .Exit
  126.         cmp.l #2,d0
  127.         beq .OT
  128.         bra .Exit
  129. .BufThree:
  130.         sub.l d1,d1
  131.         cmp.l #0,d0
  132.         beq .TZ
  133.         cmp.l #1,d0
  134.         beq .TO
  135.         cmp.l #2,d0
  136.         beq .Exit
  137.         bra .Exit
  138. .ZO:
  139.         sub.l d6,d6
  140.         sub.w d7,d6
  141.         move.w d6,d1
  142.         bra .Swap
  143. .ZT:
  144.         sub.l d6,d6
  145.         sub.l d5,d5
  146.         move.w d7,d5
  147.         add.w d7,d5
  148.         sub.w d5,d6
  149.         move.w d6,d1
  150.         bra .Swap
  151. .OZ:
  152.         move.w d7,d1
  153.         bra .Swap
  154. .OT:
  155.         sub.l d6,d6
  156.         sub.w d7,d6
  157.         move.w d6,d1
  158.         bra  .Swap
  159. .TZ:
  160.         move.w d7,d1
  161.         add.w d7,d1
  162.         bra .Swap
  163. .TO:
  164.         move.w d7,d1
  165. .Swap:
  166.         sub.l d0,d0
  167.         move.w #0,d0
  168.         jsr -162(a6)
  169.  
  170. .Exit:
  171.         movem.l (sp)+,d2-d7/a4-a6
  172.         rts
  173.  
  174. STRUCTURE RtgScreenCGX,0
  175.   APTR   rsCGX_MyScreen  ; An Intuition Screen
  176.   ULONG  rsCGX_ActiveMap ; Number of active buffer
  177.   APTR   rsCGX_MapA ; Video Mem Adress of Buffer 0 (at front at the beginning...)
  178.   APTR   rsCGX_MapB ; The same for buffer 1
  179.   APTR   rsCGX_MapC ; The same for buffer 2
  180.   APTR   rsCGX_FrontMap ; The address of the Buffer in front...
  181.   ULONG  rsCGX_Bytes ; How many bytes one pixel fills (2 for 16 Bit for example)
  182.   ULONG  rsCGX_Width ; The Width (Caution! Longword!)
  183.   UWORD  rsCGX_Height; The Height (Caution! Now word... sorry for that :) )
  184.   ULONG  rsCGX_NumBuf ; Number of buffers of that screen...
  185.   UWORD  rsCGX_Locks ; The Rtg Locks...
  186.   APTR   rsCGX_ModeID ; The ModeID of this screen ...
  187.   ULONG  rsCGX_RealMapA ; The graphics.library Bitmap structure (modified by Cyber to support Chunky)
  188.   STRUCT rsCGX_Tags,16 ; Some place for OpenRtgScreen to put something there :)
  189. LABEL rsCGX_SIZEOF
  190.  
  191. STRUCTURE ScreenQuery,0
  192.  ULONG sq_ModeID ; ModeID of the to be used Screenmode
  193.  ULONG sq_Width      ; The Width
  194.  ULONG sq_Height     ; The Height
  195.  UWORD sq_Depth      ; The color depth
  196.  ULONG sq_Buffers    ; How many Buffers...
  197. LABEL sq_SIZEOF
  198.  
  199. OpenRtgScreen:
  200.         movem.l d3-d7/a2-a6,-(sp)
  201.         cmp.l #0,CGXBase
  202.         beq .Exit
  203.         move.l a2,a4
  204.         move.w sq_Width(a2),-(sp)
  205.         move.w sq_Height(a2),-(sp)
  206.         move.l a2,a4
  207.         move.l a3,a0
  208.         move.l sq_Buffers(a2),d4
  209.         move.l #3,d0
  210.         cmp.l d0,d4
  211.         bgt .Error1
  212. .BufferDone:
  213.         move.l #rsCGX_SIZEOF,d0
  214.         move.l #MEMF_CLEAR,d1
  215.         move.l $4,a6
  216.         CALLSYS AllocMem
  217.         cmp.l #0,d0
  218.         beq .Error1
  219.         move.l d0,a3
  220.         move.l #136,d0
  221.         move.l #MEMF_CLEAR,d1
  222.         CALLSYS AllocMem
  223.         cmp.l #0,d0
  224.         beq .Error2
  225.         move.l d0,d7
  226.         move.l d0,a0
  227.         move.l #SA_Left,(a0)+
  228.         move.l #0,(a0)+
  229.         move.l #SA_Top,(a0)+
  230.         move.l #0,(a0)+
  231.         move.l #SA_Height,(a0)+
  232.         clr.l d0
  233.         move.w (sp)+,d0
  234.         clr.l d5
  235.         move.w d0,d5
  236.         move.l d0,d1
  237.         cmp.l #1,d4
  238.         beq .OneBuffer
  239.         cmp.l #2,d4
  240.         beq .TwoBuffer
  241.         cmp.l #3,d4
  242.         beq .ThreeBuffer
  243.         bra .Error3
  244. .ThreeBuffer:
  245.         add.l d1,d0
  246.         add.l d1,d5
  247.         add.l d1,d5
  248.         add.l d1,d0
  249.         bra .OneBuffer
  250. .TwoBuffer:
  251.         add.l d1,d0
  252.         add.l d1,d5
  253. .OneBuffer:
  254.         move.l d0,(a0)+
  255.         move.l #SA_Width,(a0)+
  256.         clr.l d0
  257.         move.w (sp)+,d0
  258.         clr.l d3
  259.         move.w d0,d3
  260.         move.l d3,(a0)+
  261.         clr.l d0
  262.         move.w sq_Depth(a4),d0
  263.         move.l #SA_Depth,(a0)+
  264.         move.l d0,(a0)+
  265.         move.l #SA_Title,(a0)+
  266.         move.l #0,(a0)+
  267.         move.l #SA_DisplayID,(a0)+
  268.         move.l sq_ModeID(a4),a1
  269.         move.l a1,(a0)+
  270.  
  271.         ; No Autoscroll for CyberGraphX,
  272.         ; so the user can't watch the
  273.         ; DBuffering Buffers...
  274.         ; No overscan, too...
  275.         ; And no interleaved...
  276.         ; Draggable HAS to be enabled...
  277.         ; as it is per default...
  278.  
  279.         move.l #SA_Quiet,(a0)+
  280.         move.l #1,(a0)+
  281.         move.l #SA_DClip,(a0)+
  282.         move.l d7,a2
  283.         add.l #128,a2
  284.         move.l a2,a1
  285.         move.w #0,(a1)+
  286.         move.w #0,(a1)+
  287.         move.w #640,(a1)+
  288.         move.w #480,(a1)+
  289.         move.l a2,(a0)+
  290.         move.l #TAG_END,(a0)+
  291.         move.l #0,(a0)+
  292.         move.l d7,a1
  293.         move.l #0,a0
  294.         move.l IntBase,a6
  295.         jsr -612(a6) ; OpenScreenTagList
  296.         cmp.l #0,d0
  297.         beq .Error3
  298.         move.l d7,a1
  299.         move.l d0,rsCGX_MyScreen(a3)
  300.         move.l #136,d0
  301.         move.l $4,a6
  302.         CALLSYS FreeMem
  303.         move.l #0,rsCGX_ActiveMap(a3)
  304.         move.l rsCGX_MyScreen(a3),a0
  305.         clr.l d0
  306.         move.w sc_Width(a0),d0
  307.         ext.l d0
  308.         move.l d0,rsCGX_Width(a3)
  309.         move.w d5,rsCGX_Height(a3)
  310.         move.l d4,rsCGX_NumBuf(a3)
  311.         move.w #0,rsCGX_Locks(a3)
  312.         move.l rsCGX_MyScreen(a3),a0
  313.         lea sc_RastPort(a0),a0
  314.         move.l rp_BitMap(a0),a0
  315.         move.l a0,rsCGX_RealMapA(a3)
  316.         move.l sq_ModeID(a4),d1
  317.         move.l d1,rsCGX_ModeID(a3)
  318.         move.l #CYBRIDATTR_PIXFMT,d0
  319.         move.l CGXBase,a6
  320.         jsr -102(a6) ; GetCyberIDAttr
  321.         cmp.l #0,d0
  322.         beq .OneByte
  323.         cmp.l #9,d0
  324.         blt .TwoBytes
  325.         cmp.l #11,d0
  326.         blt .ThreeBytes
  327.         cmp.l #10,d0
  328.         bgt .FourBytes
  329.         bra .Error4 ; Unknown Pixelformat
  330. .OneByte:
  331.         move.l #1,rsCGX_Bytes(a3)
  332.         bra .GetMap
  333. .TwoBytes:
  334.         move.l #2,rsCGX_Bytes(a3)
  335.         bra .GetMap
  336. .ThreeBytes:
  337.         move.l #3,rsCGX_Bytes(a3)
  338.         bra .GetMap
  339. .FourBytes:
  340.         move.l #4,rsCGX_Bytes(a3)
  341. .GetMap:
  342.         move.l #0,rsCGX_MapB(a3)
  343.         move.l #0,rsCGX_MapC(a3)
  344.  
  345.         ;move.l rsCGX_RealMapA(a3),a0
  346.         ;lea rsCGX_Tags(a3),a1
  347.         ;move.l a1,a2
  348.         ;move.l #LBMI_BASEADDRESS,(a2)+
  349.         ;move.l #0,(a2)+
  350.         ;move.l #0,(a2)+
  351.         ;move.l #0,(a2)
  352.         ;move.l a6,-(sp)
  353.         ;move.l CGXBase,a6
  354.         ;jsr -168(a6) ; LockBitMapTagList
  355.         ;move.l d0,a0
  356.         ;cmp.l #0,d0
  357.         ;beq .Error4
  358.         ;lea rsCGX_Tags(a3),a1
  359.         ;move.l 4(a1),d0
  360.         ;move.l d0,rsCGX_MapA(a3)
  361.         ;move.l d0,d7
  362.         ;jsr -174(a6) ; UnLockBitmap
  363.         ;move.l (sp)+,a6
  364.  
  365.         lea Hook,a0
  366.         move.l rsCGX_MyScreen(a3),a1
  367.         lea sc_RastPort(a1),a1
  368.         move.l #0,a2
  369.         move.l a6,-(sp)
  370.         move.l CGXBase,a6
  371.         jsr -156(a6) ; DoCDrawMethodTagList
  372.         move.l (sp)+,a6
  373.         move.l d7,rsCGX_MapA(a3)
  374.  
  375.         move.l d7,rsCGX_FrontMap(a3)
  376.         cmp.l #1,d4
  377.         beq .OnlyOne
  378.         move.l rsCGX_Width(a3),d0
  379.         clr.l d1
  380.         move.w rsCGX_Height(a3),d1
  381.         cmp.l #2,d4
  382.         beq .Zwoo
  383.         divu #3,d1
  384.         bra .Go
  385. .Zwoo:
  386.         divu #2,d1
  387. .Go:
  388.         move.w d1,rsCGX_Height(a3)
  389.         mulu d1,d0
  390.         add.l d0,d7
  391.         move.l d7,rsCGX_MapB(a3)
  392.         cmp.l #2,d4
  393.         beq .OnlyOne
  394.         move.l rsCGX_Width(a3),d0
  395.         mulu d1,d0
  396.         add.l d0,d7
  397.         move.l d7,rsCGX_MapC(a3)
  398. .OnlyOne:
  399.         move.l a3,d0
  400.         clr.l d1
  401.         clr.l d2
  402.         move.w rsCGX_Height(a3),d1
  403.         move.l d1,d2
  404.         move.l #0,rsCGX_OffA(a3)
  405.         move.l d1,rsCGX_OffB(a3)
  406.         add.l d2,d1
  407.         cmp.l #2,d4
  408.         beq .SaveMap2
  409.         move.l d1,rsCGX_OffC(a3)
  410. .SaveMap2:
  411.         movem.l (sp)+,d3-d7/a2-a6
  412.         rts
  413. .Exit:
  414.         move.l #0,d0
  415.         movem.l (sp)+,d3-d7/a2-a6
  416.         rts
  417. .Error1:
  418.         tst.l (sp)+
  419. .Raus:
  420.         movem.l (sp)+,d3-d7/a2-a6
  421.         move.l #0,d0
  422.         rts
  423. .Error2:
  424.         move.l $4,a6
  425.         move.l a3,a1
  426.         move.l #rsCGX_SIZEOF,d0
  427.         CALLSYS FreeMem
  428.         bra .Error1
  429. .Error3:
  430.         move.l $4,a6
  431.         move.l d7,a1
  432.         move.l #136,d0
  433.         CALLSYS FreeMem
  434.         bra .Error2
  435. .Error4:
  436.         move.l rsCGX_MyScreen(a3),a0
  437.         move.l IntBase,a6
  438.         jsr -66(a6)
  439.         bra .Error2
  440. Hook:
  441.         dc.l 0,0,HookFunc,0,0
  442. HookFunc:
  443.         movem.l d0-d6,-(sp)
  444.         move.l (a1),d7 ; Address
  445.         move.l 4(a1),d1 ; X-Offset
  446.         move.l 8(a1),d2 ; Y-Offset
  447.         clr.l d3
  448.         clr.l d4
  449.         move.w 20(a1),d3 ; BytesPerRow
  450.         move.w 22(a1),d4 ; BytesPerPixel
  451.         clr.l d6
  452.         mulu d4,d1
  453.         add.l d1,d6
  454.         mulu d2,d3
  455.         add.l d3,d6
  456.         ror.l #2,d6
  457.         add.l d6,d7
  458.         movem.l (sp)+,d0-d6
  459.         rts
  460.  
  461. GetRtgScreenData:
  462.     Move.l  a0,a2
  463.     Move.l  a1,a3
  464.     Move.l  rsCGX_MyScreen(a2),a4
  465.     move.l  a6,a5
  466.     Move.l  UtilityBase,a6
  467.     Move.l  #grd_Width,d0
  468.     Move.l  a3,a0
  469.     Jsr     -30(a6) Utility - FindTagItem
  470.     Tst.l   d0
  471.     Beq.s   .NoWidth
  472.     move.l d0,a1
  473.     move.l rsCGX_RealMapA(a4),a0
  474.     move.l #CYBRMATTR_WIDTH,d1
  475.     move.l CGXBase,a6
  476.     move.l a1,-(sp)
  477.     jsr -96(a6); GetCyberMapAttr
  478.     move.l (sp)+,a1
  479.     move.l UtilityBase,a6
  480.     move.l d0,ti_Data(a1)
  481. .NoWidth
  482.     Move.l  #grd_Height,d0
  483.     Move.l  a3,a0
  484.     Jsr     -30(a6) Utility - FindTagItem
  485.     Tst.l   d0
  486.     Beq.s   .NoHeight
  487.     move.l d0,a1
  488.     move.l rsCGX_RealMapA(a4),a0
  489.     move.l #CYBRMATTR_HEIGHT,d1
  490.     move.l CGXBase,a6
  491.     move.l a1,-(sp)
  492.     jsr -96(a6); GetCyberMapAttr
  493.     move.l (sp)+,a1
  494.     move.l UtilityBase,a6
  495.     move.l d0,ti_Data(a1)
  496. .NoHeight
  497.     Move.l  #grd_PixelLayout,d0
  498.     Move.l  a3,a0
  499.     Jsr     -30(a6) Utility - FindTagItem
  500.     Tst.l   d0
  501.     Beq   .NoPixelLayout
  502.     move.l d0,a1
  503.     move.l rsCGX_RealMapA(a4),a0
  504.     move.l #CYBRMATTR_PIXFMT,d1
  505.     move.l CGXBase,a6
  506.     move.l a1,-(sp)
  507.     jsr -96(a6) ; GetCyberMapAttr
  508.     move.l (sp)+,a1
  509.     move.l UtilityBase,a6
  510.     cmp.l #0,d0
  511.     beq .FmtChunky
  512.     cmp.l #5,d0
  513.     blt .FmtHi15
  514.     cmp.l #9,d0
  515.     blt .FmtHi16
  516.     cmp.l #11,d0
  517.     blt .FmtTrue24
  518.     cmp.l #11,d0
  519.     beq .FmtTrue32B
  520.     cmp.l #12,d0
  521.     beq .FmtTrue32
  522.     cmp.l #13,d0
  523.     beq .FmtTrue32
  524.     bra .NoPixelLayout ; Unsupported Pixellayout
  525. .FmtChunky:
  526.     move.l #grd_CHUNKY,d0
  527.     bra .ValueReturn
  528. .FmtHi15:
  529.     move.l #grd_HICOL15,d0
  530.     bra .ValueReturn
  531. .FmtHi16:
  532.     move.l #grd_HICOL16,d0
  533.     bra .ValueReturn
  534. .FmtTrue24:
  535.     move.l #grd_TRUECOL24,d0
  536.     bra .ValueReturn
  537. .FmtTrue32:
  538.     move.l #grd_TRUECOL32,d0
  539.     bra .ValueReturn
  540. .FmtTrue32B:
  541.     move.l #grd_TRUECOL32B,d0
  542.     bra .ValueReturn
  543. .ValueReturn:
  544.     move.l d0,ti_Data(a1)
  545. .NoPixelLayout
  546.     Move.l  #grd_ColorSpace,d0
  547.     Move.l  a3,a0
  548.     Jsr     -30(a6) Utility - FindTagItem
  549.     Tst.l   d0
  550.     Beq   .NoColorSpace
  551.     move.l d0,a1
  552.     move.l rsCGX_RealMapA(a4),a0
  553.     move.l #CYBRMATTR_PIXFMT,d1
  554.     move.l CGXBase,a6
  555.     move.l a1,-(sp)
  556.     jsr -96(a6) ; GetCyberMapAttr
  557.     move.l (sp)+,a1
  558.     move.l UtilityBase,a6
  559.     cmp.l #0,d0
  560.     beq .FmtPalette
  561.     cmp.l #1,d0
  562.     beq .FmtRGB
  563.     cmp.l #5,d0
  564.     beq .FmtRGB
  565.     cmp.l #9,d0
  566.     beq .FmtRGB
  567.     cmp.l #11,d0
  568.     beq .FmtRGB
  569.     cmp.l #2,d0
  570.     beq .FmtBGR
  571.     cmp.l #6,d0
  572.     beq .FmtBGR
  573.     cmp.l #10,d0
  574.     beq .FmtBGR
  575.     cmp.l #12,d0
  576.     beq .FmtBGR
  577.     cmp.l #3,d0
  578.     beq .FmtRGBPC
  579.     cmp.l #7,d0
  580.     beq .FmtRGBPC
  581.     cmp.l #4,d0
  582.     beq .FmtBGRPC
  583.     cmp.l #8,d0
  584.     beq .FmtBGRPC
  585.     cmp.l #13,d0
  586.     beq .FmtRGB
  587.     bra .NoColorSpace ; Unknown Format
  588. .FmtPalette
  589.     move.l #grd_Palette,d0
  590.     bra .ReturnValue
  591. .FmtRGB
  592.     move.l #grd_RGB,d0
  593.     bra .ReturnValue
  594. .FmtBGR
  595.     move.l #grd_BGR,d0
  596.     bra .ReturnValue
  597. .FmtRGBPC
  598.     move.l #grd_RGBPC,d0
  599.     bra .ReturnValue
  600. .FmtBGRPC
  601.     move.l #grd_BGRPC,d0
  602.     bra .ReturnValue
  603. .ReturnValue
  604.     move.l d0,ti_Data(a1)
  605. .NoColorSpace
  606.     Move.l  #grd_Depth,d0
  607.     Move.l  a3,a0
  608.     Jsr     -30(a6) Utility - FindTagItem
  609.     Tst.l   d0
  610.     Beq.s   .NoDepth
  611.     move.l d0,a1
  612.     move.l rsCGX_RealMapA(a4),a0
  613.     move.l #CYBRMATTR_DEPTH,d1
  614.     move.l CGXBase,a6
  615.     move.l a1,-(sp)
  616.     jsr -96(a6); GetCyberMapAttr
  617.     move.l (sp)+,a1
  618.     move.l UtilityBase,a6
  619.     move.l d0,ti_Data(a1)
  620. .NoDepth
  621.     Move.l  #grd_Buffers,d0
  622.     Move.l  a3,a0
  623.     Jsr     -30(a6) Utility - FindTagItem
  624.     Tst.l   d0
  625.     Beq.s   .NoBuffers
  626.     move.l d0,a1
  627.     move.l rsCGX_NumBuf(a4),d0
  628.     move.l d0,ti_Data(a1)
  629. .NoBuffers
  630.     Movem.l (sp)+,a2-a5/a6
  631.     rts
  632.  
  633. BlitRtg:
  634.     movem.l d6-d7/a3/a6,-(sp)
  635.     move.l a0,a3
  636.     move.l rsCGX_RealMapA(a0),a1
  637.     move.l #0,a2
  638.     cmp.l #0,d6
  639.     beq .Weiter
  640.     cmp.l #1,d6
  641.     beq .Buffer1Src
  642.     bra .Buffer2Src
  643. .Buffer1Src:
  644.     movem.l d4/d5,-(sp)
  645.     move.l rsCGX_Width(a3),d4
  646.     clr.l d4
  647.     clr.l d5
  648.     move.w rsCGX_Height(a3),d5
  649.     mulu d5,d4
  650.     add.l d4,d1
  651.     movem.l (sp)+,d4/d5
  652.     bra .Weiter
  653. .Buffer2Src:
  654.     movem.l d4/d5,-(sp)
  655.     move.l rsCGX_Width(a3),d4
  656.     clr.l d4
  657.     clr.l d5
  658.     move.w rsCGX_Height(a3),d5
  659.     mulu d5,d4
  660.     add.l d4,d1
  661.     add.l d4,d1
  662.     movem.l (sp)+,d4/d5
  663. .Weiter:
  664.     clr.l d6
  665.     cmp.l #0,d7
  666.     beq .WeiterD
  667.     cmp.l #1,d7
  668.     beq .Buffer1Dest
  669.     bra .Buffer2Dest
  670. .Buffer1Dest:
  671.     movem.l d4/d5,-(sp)
  672.     move.l rsCGX_Width(a3),d4
  673.     clr.l d4
  674.     clr.l d5
  675.     move.w rsCGX_Height(a3),d5
  676.     mulu d5,d4
  677.     add.l d4,d3
  678.     movem.l (sp)+,d4/d5
  679.     bra .WeiterD
  680. .Buffer2Dest:
  681.     movem.l d4/d5,-(sp)
  682.     move.l rsCGX_Width(a3),d4
  683.     clr.l d4
  684.     clr.l d5
  685.     move.w rsCGX_Height(a3),d5
  686.     mulu d5,d4
  687.     add.l d4,d3
  688.     add.l d4,d3
  689.     movem.l (sp)+,d4/d5
  690. .WeiterD:
  691.     clr.l d7
  692.     move.b #$C0,d6
  693.     move.b #$FF,d7
  694.     move.l GfxBase,a6
  695.     jsr -30(a6) ; BltBitMap
  696.     jsr -228(a6) ; WaitBlit
  697.     movem.l (sp)+,d6-d7/a3/a6
  698.     rts
  699.  
  700. STRUCTURE CyberModeNode,0
  701.  STRUCT  cmn_Node,LN_SIZE
  702.  STRUCT  cmn_ModeText,DISPLAYNAMELEN ; Screenmodename
  703.  ULONG   cmn_DisplayID ; ModeID
  704.  UWORD   cmn_Width ; Width
  705.  UWORD   cmn_Height ; Height
  706.  UWORD   cmn_Depth ; Depth
  707.  APTR    cmn_DisplayTagList ; Ignore this at the moment
  708. LABEL   cmn_SIZEOF
  709.  
  710. CloseRtgScreen:
  711.       movem.l a6,-(sp)
  712.       move.l IntBase,a6
  713.       move.l rsCGX_MyScreen(a0),d0
  714.       beq .ScreenClosed
  715.       move.l d0,a0
  716.       jsr -66(a6)
  717. .ScreenClosed:
  718.       movem.l (sp)+,a6
  719.       rts
  720.  
  721. ScreenAtFront:
  722.     Move.l  IntBase,a1
  723.     Move.l  60(a1),d0
  724.     Cmp.l   rsCGX_MyScreen(a0),d0
  725.     Beq.s   .AtFront
  726.     Moveq   #0,d0
  727.     Rts
  728. .AtFront
  729.     Moveq   #-1,d0
  730.     Rts
  731.  
  732. CloseLibs:
  733.       cmp.l #0,CGXBase
  734.       beq .Exit
  735.       move.l $4,a6
  736.       move.l CGXBase,a1
  737.       CALLSYS CloseLibrary
  738. .Exit:
  739.       move.l #0,d0
  740.       rts
  741.  
  742. LockRtgScreen:
  743.       add.w #1,rsCGX_Locks(a0)
  744.       move.l rsCGX_MapA(a0),d0
  745.       rts
  746.  
  747. UnlockRtgScreen:
  748.  
  749.     clr.l d0
  750.     move.w rsCGX_Locks(a0),d0
  751.     cmp.w #0,d0
  752.     beq .Exit
  753.     subq.w #1,rsCGX_Locks(a0)
  754. .Exit
  755.     rts
  756.  
  757. LoadRGBRtg:
  758.  
  759.         Movem.l d2-d5/a2-a3/a6,-(sp)
  760.  
  761.         Move.l  GfxBase(a6),a6
  762.         Move.l  rsCGX_MyScreen(a0),a2
  763.         Lea     44(a2),a2
  764.         Move.l  a1,a3
  765. .Loop2  Move.w  (a3)+,d4
  766.         Beq.s   .Exit
  767.         Move.w  (a3)+,d5
  768.         Bra.s   .Wend
  769.  
  770. .Loop   Move.l  a2,a0
  771.         Move.w  d5,d0
  772.         Addq.w  #1,d5
  773.         Move.l  (a3)+,d1
  774.         Move.l  (a3)+,d2
  775.         Move.l  (a3)+,d3
  776.         Jsr     -852(a6)        Graphics - SetRGB32
  777. .Wend   Dbra    d4,.Loop
  778.         Bra.s   .Loop2
  779. .Exit   Movem.l (sp)+,d2-d5/a2-a3/a6
  780.         Rts
  781.  
  782. GetScreenmodes:
  783.     move.l a6,-(sp)
  784.     move.l CGXBase,a6
  785.     lea tags,a1
  786.     jsr -72(a1) ; AllocCModeListTagList
  787.     move.l (sp)+,a6
  788.     rts
  789. tags:
  790.     dc.l CYBRMREQ_MinWidth,MinWidth
  791.     dc.l CYBRMREQ_MaxWidth,MaxWidth
  792.     dc.l CYBRMREQ_MinHeight,MinHeight
  793.     dc.l CYBRMREQ_MaxHeight,MaxHeight
  794.     dc.l CYBRMREQ_MinDepth,MinDepth
  795.     dc.l CYBRMREQ_MaxDepth,MaxDepth
  796.  
  797.  
  798. FreeScreenmodes:
  799.  move.l a6,-(sp)
  800.  move.l CGXBase,a6
  801.  move.l Modes,a0
  802.  jsr -78(a6) ; FreeCModeList
  803.  move.l (sp)+,a6
  804.  rts
  805.  
  806. GetBufAdr:
  807.         Lsl.w   #2,d0
  808.         Move.l  rsCGX_MapA(a0,d0.w),d0
  809.         Rts
  810.